package com.cong.modules.sys.service;

import java.util.List;
import java.util.Set;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cong.common.vo.AjaxResultVo;
import com.cong.modules.sys.model.SysMenu;
import com.cong.modules.sys.model.SysRole;
import com.cong.modules.sys.model.SysUser;

public interface RoleService extends IService<SysRole> {

	/**
	 * 根据条件查询角色列表
	 *
	 * @param role 角色
	 */
	List<SysRole> listRoles(SysRole role);

	/**
	 * 根据id查询角色
	 *
	 * @param roleId 角色ID
	 */
	SysRole getSysRoleById(Long roleId);

	/**
	 * 根据角色id查询权限集合
	 *
	 * @param roleId 角色ID
	 */
	List<SysMenu> listMenusByRoleId(Long roleId);

	/**
	 * 根据角色id保存分配权限
	 *
	 * @param roleId 角色ID
	 * @param menuIdsList 菜单ID集合
	 */
	AjaxResultVo addAssignMenu(Long roleId, List<Long> menuIdsList);

	/**
	 * 根据角色id下的所有用户
	 *
	 * @param roleIds 角色ID集合
	 */
	List<SysUser> listAllUsersByRoleIds(Long[] roleIds);

	/**
	 * 根据用户id查询角色集合
	 *
	 * @param userId 用户ID
	 */
	Set<Long> listRoleIdsByUserId(Long userId);

	/**
	 * 根据角色id查询用户集合
	 *
	 * @param roleId 角色ID
	 */
	Set<Long> listUserIdsByRoleId(Long roleId);

	/**
	 * 取消分配用户
	 *
	 * @param roleId 角色ID
	 */
	AjaxResultVo cancelAssign(Long roleId, Long userId);

	/**
	 * 分配用户
	 *
	 * @param roleId 角色ID
	 */
	AjaxResultVo assignUser(Long roleId, Long userId);

	/**
	 * 获取角色
	 *
	 * @param userId 用户ID
	 */
	Set<String> listRoleNameByUserId(Long userId);

	/**
	 * 删除角色菜单关系
	 *
	 * @param roleIdsList 角色ID集合
	 */
	boolean batchRemoveRoleAndMenu(List<Long> roleIdsList);

}
